home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / fb386 / tdp / tdp.bas next >
BASIC Source File  |  1991-10-18  |  14KB  |  365 lines

  1. 1000 '--------------------------------------------------------------------
  2. 1010 ' Basic Sample Program                                     1991.08.09
  3. 1020 '
  4. 1030 '   Tdp  Ver 0.1
  5. 1040 '                                                          by M.INOUE
  6. 1050 '--------------------------------------------------------------------
  7. 1060 CLEAR ,,4096
  8. 1070 DEFINT A-Z:DIM TXT$(5000),WIN(60000),MX1(10),MY1(10),MX2(10),MY2(10)
  9. 1080 '
  10. 1090 ON ERROR GOTO *エラー処理
  11. 1100 '
  12. 1110 GOSUB *初期画面表示 
  13. 1120 '
  14. 1130 GOSUB *処理の振り分け : GOTO 1130
  15. 1140 END
  16. 1150 '
  17. 1160 '--------------------------------------------------------------------
  18. 1170 *初期画面表示
  19. 1180 '--------------------------------------------------------------------
  20. 1190 SCREEN@ 2 : CONSOLE 2,22,2 : COLOR 0,7 : CLS 
  21. 1200 '
  22. 1210 RESTORE *カラー
  23. 1220 FOR Q=1 TO 8 STEP 1
  24. 1230   READ C1,P1,P2,P3 : PALETTE C1,[ P1,P2,P3 ]
  25. 1240 NEXT Q
  26. 1250 '
  27. 1260 LINE (2,2)-(638,32),PSET,%2,BF : LINE (1,31)-(638,32),PSET,%0,BF
  28. 1270 LINE (638,2)-(639,32),PSET,%0,BF
  29. 1280 COLOR 0,%0
  30. 1290 LINE (4,6)-(54,28),PSET,%0,B : LINE (4,5)-(53,27),PSET,%7,BF
  31. 1300 SYMBOL(5,7),"Tdp",.9!,.7!,%6,,,5,1
  32. 1310 SYMBOL(5,19),"Ver0.1",.7!,.5!,%6,,,5,2
  33. 1320 '
  34. 1330 RESTORE *機能
  35. 1340 XX1=60 : YY1=6
  36. 1350 FOR Q=1 TO 5 STEP 1
  37. 1360   READ Q1$,Q2$
  38. 1370   MX1(Q)=XX1 : MY1(Q)=YY1 : MX2(Q)=XX1+40 : MY2(Q)=YY1+21
  39. 1380   LINE (XX1,YY1)-(XX1+41,YY1+22),PSET,%0,B
  40. 1390   LINE (XX1,YY1-1)-(XX1+40,YY1+21),PSET,%1,BF
  41. 1400   SYMBOL(XX1+2,YY1+1),Q1$,1,.7!,%7,,,5,5
  42. 1410   SYMBOL(XX1+4,YY1+14),Q2$,1,.4!,%7,,,5
  43. 1420   XX1=XX1+44
  44. 1430 NEXT Q
  45. 1440 '
  46. 1450 SYMBOL(290,8),"行位置=    -    行  使用量=    行(   %)",1,1,7,,,5,1
  47. 1460 COLOR 0,7
  48. 1470 MOUSE 0 : MOUSE 1,,,1
  49. 1480 WN=1 : YY=1 : YM=21 : MAX=5000 : PMX=61 : PC$="Init" : FIL$=""
  50. 1490 KEY 1,CHR$(&H90) : KEY 4,CHR$(&H91) : KEY 5,CHR$(&H92)
  51. 1500 MK$=CHR$(&H90)+CHR$(&H91)+CHR$(&H92)+CHR$(&H1F)+CHR$(&H1E)
  52. 1510 RETURN
  53. 1520 ' 
  54. 1530 *機能
  55. 1540 DATA "終了","PF01"
  56. 1550 DATA "印刷","PF04"
  57. 1560 DATA "読込","PF05"
  58. 1570 DATA "次行"," ↓ "
  59. 1580 DATA "前行"," ↑ "
  60. 1590 ' 
  61. 1600 *カラー
  62. 1610 DATA 0,000,000,000 : '
  63. 1620 DATA 1,151,151,151 : '
  64. 1630 DATA 2,191,191,191 : '
  65. 1640 DATA 3,255,255,255 : '
  66. 1650 DATA 4,255,255,255 : '
  67. 1660 DATA 5,220,220,220 : '
  68. 1670 DATA 6,255,255,000 : '
  69. 1680 DATA 7,255,255,255 : '
  70. 1690 '
  71. 1700 '--------------------------------------------------------------------
  72. 1710 *処理の振り分け
  73. 1720 '--------------------------------------------------------------------
  74. 1730 K$=INKEY$ : IF K$<>"" THEN MQ=INSTR(MK$,K$) : IF MQ>0 THEN GOTO 1830
  75. 1740 '
  76. 1750 MSW=MOUSE(2,0) : IF MSW=0 THEN RETURN
  77. 1760 MSX=MOUSE(4,0) : MSY=MOUSE(5,0) : MSF=0 : MQ=1 : MQX=7
  78. 1770 WHILE MSF<>-1
  79. 1780   MSF=(MSX>MX1(MQ) AND MSX<MX2(MQ) AND MSY>MY1(MQ) AND MSY<MY2(MQ))
  80. 1790   MQ=MQ+1+MSF : MSF=(MQ>MQX OR MSF)
  81. 1800 WEND
  82. 1810 IF MQ>MQX THEN RETURN
  83. 1820 '
  84. 1830 ON MQ GOSUB *終了,*印刷,*読込,*スクロール,*逆スクロール,*確認,*取消
  85. 1840 RETURN
  86. 1850 '
  87. 1860 '--------------------------------------------------------------------
  88. 1870 *終了
  89. 1880 '--------------------------------------------------------------------
  90. 1890 IF PC$="Init" THEN PC$="End1" : GOTO *終了1
  91. 1900 IF PC$="Look" THEN PC$="End2" : GOTO *終了1
  92. 1910 RETURN
  93. 1920 *終了1
  94. 1930 CX=11 : CY=12 : WX=18 : WY=5 : WF$="w&c" : WP$="on"
  95. 1940 WM$="Tdpを終了するよ、いいかい!" : GOSUB *枠の表示
  96. 1950 IF WQK$="ok"  THEN END
  97. 1960 IF PC$="End1" THEN PC$="Init" : RETURN
  98. 1970 IF PC$="End2" THEN PC$="Look" : RETURN
  99. 1980 RETURN
  100. 1990 '
  101. 2000 '--------------------------------------------------------------------
  102. 2010 *確認
  103. 2020 '--------------------------------------------------------------------
  104. 2030 WQK$="ok" : WQT$=""  : K$=CHR$(&H94) : RETURN
  105. 2040 '
  106. 2050 '--------------------------------------------------------------------
  107. 2060 *取消
  108. 2070 '--------------------------------------------------------------------
  109. 2080 WQK$="no" : WQT$="2" : K$=CHR$(&H94) : RETURN
  110. 2090 '
  111. 2100 '--------------------------------------------------------------------
  112. 2110 *印刷
  113. 2120 '--------------------------------------------------------------------
  114. 2130 IF PC$="Look" THEN PC$="Print" ELSE RETURN
  115. 2140 CX=12 : CY=11 : WX=16 : WY=5 : WF$="w&c" : WP$="off"
  116. 2150 WM$="印刷を始めてもいい!" : GOSUB *枠の表示
  117. 2160 IF WQK$="no" THEN *印刷終了
  118. 2170 PT=1 : PG=1
  119. 2180 KANJI OFF
  120. 2190 LPRINT CHR$(&H0A);
  121. 2200 KANJI ON
  122. 2210 FOR J=1 TO I STEP 1
  123. 2220   LPRINT " ";TXT$(J)
  124. 2230   PT=PT+1 : IF PT>PMX THEN GOSUB *改頁 : LPRINT CHR$(&H0A);
  125. 2240 NEXT J
  126. 2250 IF PT<PMX THEN GOSUB *頁位置調整
  127. 2260 CX=13 : CY=13 : WX=14 : WY=5 : WF$="wait" : WP$="on"
  128. 2270 WM$="印刷が終わったよ!" : GOSUB *枠の表示
  129. 2280 *印刷終了
  130. 2290 CX=12 : CY=11 : WX=16 : WY=5 : WP$="put" : GOSUB *枠の表示
  131. 2300 PC$="Look" : RETURN
  132. 2310 '
  133. 2320 *改頁
  134. 2330 KANJI OFF
  135. 2340 LPRINT CHR$(&H0A);
  136. 2350 LPRINT SPACE$(37);"- ";PG;" -";CHR$(&H0C); : PG=PG+1 : PT=1 
  137. 2360 KANJI ON
  138. 2370 RETURN
  139. 2380 '
  140. 2390 *頁位置調整
  141. 2400 KANJI OFF
  142. 2410 FOR J=1 TO PMX-PT+1 STEP 1 : LPRINT CHR$(&H0A); : NEXT : GOSUB *改頁
  143. 2420 KANJI ON
  144. 2430 RETURN
  145. 2440 '
  146. 2450 '--------------------------------------------------------------------
  147. 2460 *読込
  148. 2470 '--------------------------------------------------------------------
  149. 2480 IF PC$="Init" THEN PC$="File1" : GOTO *読込1
  150. 2490 IF PC$="Look" THEN PC$="File2" : GOTO *読込1
  151. 2500 RETURN
  152. 2510 *読込1
  153. 2520 FP$="off"
  154. 2530 CX=12 : CY=10 : WX=16 : WY=8 : WF$="input" : WP$=FP$ : FP$="or"
  155. 2540 WM$="ファイル名を入力してよ!" : WIO$=FIL$ : GOSUB *枠の表示
  156. 2550 IF WQK$="Can" THEN 2620
  157. 2560 '
  158. 2570 OPEN "I",#1,WI$ : I=0
  159. 2580 WHILE EOF(1)<>-1
  160. 2590   I=I+1 : IF I>MAX THEN GOTO 2610
  161. 2591   LINE INPUT#1,T$ : TXT$(I)=T$+SPACE$(79-LEN(T$))
  162. 2600 WEND
  163. 2610 CLOSE#1
  164. 2620 '
  165. 2630 CX=12 : CY=10 : WX=16 : WY=8 : WP$="put" : GOSUB *枠の表示
  166. 2640 IF WQK$="Can" AND PC$="File1" THEN PC$="Init" : RETURN
  167. 2650 IF WQK$="Can" AND PC$="File2" THEN PC$="Look" : RETURN
  168. 2660 '
  169. 2670 YY=1 : U=(I*100)/MAX : FIL$=WI$
  170. 2680 '
  171. 2690 COLOR 0,%2
  172. 2700 Y$=STR$(I):Y$=SPACE$(4-LEN(Y$))+Y$:SYMBOL(528,9),Y$,1,1,%7,,OPAQUE,1
  173. 2710 Y$=STR$(U):Y$=SPACE$(3-LEN(Y$))+Y$:SYMBOL(588,9),Y$,1,1,%7,,OPAQUE,1
  174. 2720 COLOR 0,%7
  175. 2730 GOSUB *内容表示
  176. 2740 PC$="Look" : RETURN
  177. 2750 '
  178. 2760 '--------------------------------------------------------------------
  179. 2770 *内容表示
  180. 2780 '--------------------------------------------------------------------
  181. 2790 COLOR 0,%7 : Y=1
  182. 2800 FOR J=YY TO YM+YY STEP 1
  183. 2810   Y=Y+1 : LOCATE 0,Y : PRINT TXT$(J);
  184. 2820 NEXT J
  185. 2830 GOSUB *行数表示 : RETURN
  186. 2840 '
  187. 2850 '--------------------------------------------------------------------
  188. 2860 *スクロール
  189. 2870 '--------------------------------------------------------------------
  190. 2880 IF PC$<>"Look" THEN RETURN
  191. 2890 COLOR 0,%7
  192. 2900 IF YY<I-YM THEN YY=YY+1 ELSE RETURN
  193. 2910 LOCATE  79,YM+2 : PRINT " ";
  194. 2920 LOCATE  0,YM+4 : PRINT TXT$(YM+YY);
  195. 2930 GOSUB *行数表示 : RETURN
  196. 2940 '
  197. 2950 '--------------------------------------------------------------------
  198. 2960 *逆スクロール
  199. 2970 '--------------------------------------------------------------------
  200. 2980 IF PC$<>"Look" THEN RETURN
  201. 2990 COLOR 0,%7
  202. 3000 IF YY>1 THEN YY=YY-1 ELSE RETURN
  203. 3010 LOCATE  0,2 : PRINT CHR$(&H1B)+"E";
  204. 3020 LOCATE  0,2 : PRINT TXT$(YY);
  205. 3030 GOSUB *行数表示 : RETURN
  206. 3040 '
  207. 3050 '--------------------------------------------------------------------
  208. 3060 *行数表示
  209. 3070 '--------------------------------------------------------------------
  210. 3080 COLOR 0,%2
  211. 3090 Y$=STR$(YY) : Y$=SPACE$(4-LEN(Y$))+Y$
  212. 3100 SYMBOL(354,9),Y$,1,1,%7,,OPAQUE,1
  213. 3110 Y$=STR$(YY+YM) : Y$=SPACE$(4-LEN(Y$))+Y$
  214. 3120 SYMBOL(398,9),Y$,1,1,%7,,OPAQUE,1
  215. 3130 COLOR 0,%7
  216. 3140 RETURN
  217. 3150 '
  218. 3160 '--------------------------------------------------------------------
  219. 3170 *エラー処理
  220. 3180 '--------------------------------------------------------------------
  221. 3190 IF ERL=2570 AND ERR=63 THEN GOSUB *ファイル無   : RESUME 2530
  222. 3200 IF ERL=2570 AND ERR=55 THEN GOSUB *ファイル違い : RESUME 2530
  223. 3210 IF ERL=2570 AND ERR=72 THEN GOSUB *装置使用不可 : RESUME 2530
  224. 3220 CX=11 : CY=10 : WX=18 : WY=5 : WF$="wait" : WP$="on" 
  225. 3230 WM$="エラーがでたよ! 内容("+STR$(ERR)+")" : GOSUB *枠の表示 : END
  226. 3240 '
  227. 3250 *ファイル無
  228. 3260 CX=16 : CY=15 : WX=15 : WY=5 : WF$="wait" : WP$="on" 
  229. 3270 WM$="ファイルがないよ!" : GOSUB *枠の表示 : RETURN
  230. 3280 '
  231. 3290 *ファイル違い
  232. 3300 CX=16 : CY=15 : WX=16 : WY=5 : WF$="wait" : WP$="on"
  233. 3310 WM$="ファイル名の書き方が違うよ!" : GOSUB *枠の表示 : RETURN
  234. 3320 '
  235. 3330 *装置使用不可
  236. 3340 CX=16 : CY=15 : WX=16 : WY=5 : WF$="wait" : WP$="on" 
  237. 3350 WM$="ディスクがセットされてないよ!" : ER$=LEFT$(WI$,2)
  238. 3360 IF ER$="Q:" OR ER$="q:" THEN WM$="CDがセットされてないよ!"
  239. 3370 GOSUB *枠の表示 : RETURN
  240. 3380 '
  241. 3390 '--------------------------------------------------------------------
  242. 3400 *枠の表示
  243. 3410 '                 CX=桁位置 CY=行位置 WX=桁数 WY=行数 WF$=表示モード
  244. 3420 '                 WN=退避NO WP$=復元モード
  245. 3430 '--------------------------------------------------------------------
  246. 3440 HX=CX+WX : HY=CY+WY : WC$=STR$(WN)
  247. 3450 WWX1=CX*16 : WWY1=CY*16 : WWX2=HX*16 : WWY2=HY*16
  248. 3460 WWX3=WX*17 : WWY3=WY*17
  249. 3470 IF WX > WY THEN WW=(WY*16)/2 ELSE WW=(WX*16)/2 
  250. 3480 IF WP$="put" THEN WN=WN-1 : GOSUB *枠の復元 : RETURN
  251. 3490 IF WP$="or"  THEN *表示モード枠 ELSE GOSUB *枠の退避
  252. 3500 IF WP$="off" THEN WN=WN+1 
  253. 3510 FOR EW=WW TO 1 STEP -1
  254. 3520   LINE (WWX1+EW,WWY1+EW)-(WWX2-EW,WWY2-EW),PSET,%2,B
  255. 3530 NEXT EW
  256. 3540 LINE (WWX1-1,WWY1-1)-(WWX2+1,WWY1+1),PSET,%7,BF
  257. 3550 LINE (WWX1-1,WWY1-1)-(WWX1+1,WWY2+1),PSET,%7,BF
  258. 3560 LINE (WWX1-2,WWY1-2)-(WWX2+1,WWY2+1),PSET,%0,B
  259. 3570 LINE (WWX1,WWY2)-(WWX2,WWY2),PSET,%0,BF
  260. 3580 LINE (WWX1+1,WWY2-1)-(WWX2,WWY2-1),PSET,%0,BF
  261. 3590 LINE (WWX2,WWY1)-(WWX2,WWY2),PSET,%0,BF
  262. 3600 LINE (WWX2-1,WWY1+1)-(WWX2-1,WWY2),PSET,%0,BF
  263. 3610 COLOR 0,%0 
  264. 3620 SYMBOL(WWX1,WWY1+4),WC$,.5!,.5!,%6,,PSET,5 
  265. 3630 SYMBOL(WWX1+16,WWY1+16),WM$,1,1,%7,,PSET,5 
  266. 3640 COLOR 0,%7
  267. 3650 *表示モード枠
  268. 3660 IF WF$="wait"            THEN GOSUB *確認要求
  269. 3670 IF WF$="w&c"             THEN GOSUB *確認と取消
  270. 3680 IF WF$="input"           THEN GOSUB *入力
  271. 3690 IF WP$="off" OR WP$="or" THEN RETURN
  272. 3700 GOSUB *枠の復元 : RETURN
  273. 3710 '
  274. 3720 *確認要求
  275. 3730 WRX=(CX+WX-6)*16+8 : WRY=(CY+WY-2)*16 : WQK$="ok" 
  276. 3740 MX1(6)=WRX : MY1(6)=WRY : MX2(6)=WRX+74 : MY2(6)=WRY+18
  277. 3750 BQ=6 : BM$="わかった!" : GOSUB *ボタン表示 : GOSUB *ボタン押す
  278. 3760 GOSUB *処理の振り分け : IF K$="" THEN 3760 ELSE RETURN
  279. 3770 '
  280. 3780 *確認と取消
  281. 3790 WQX=(CX+WX-9)*16 : WQY=(CY+WY-2)*16 : WQK$="ok" 
  282. 3800 MX1(6)=WQX-2 : MY1(6)=WQY-2 : MX2(6)=WQX+58 : MY2(6)=WQY+18
  283. 3810 MX1(7)=WQX+70 : MY1(7)=WQY-2 : MX2(7)=WQX+130 : MY2(7)=WQY+18
  284. 3820 BQ=6 : BM$="いいよ!" : GOSUB *ボタン表示 : GOSUB *ボタン押す
  285. 3830 BQ=7 : BM$="いやだ!" : GOSUB *ボタン表示
  286. 3840 GOSUB *処理の振り分け : IF K$="" THEN 3840
  287. 3850 IF K$=CHR$(&H1D) AND WQK$="no" THEN WQK$="ok" : WQT$="1"
  288. 3860 IF K$=CHR$(&H1C) AND WQK$="ok" THEN WQK$="no" : WQT$="2"
  289. 3870 IF K$=CHR$(&H0D)               THEN WAIT 50 : GOTO 3920
  290. 3880 IF WQT$="1" THEN BQ=7 : GOSUB *ボタン押す : BQ=6 : GOSUB *ボタン戻す
  291. 3890 IF WQT$="2" THEN BQ=6 : GOSUB *ボタン押す : BQ=7 : GOSUB *ボタン戻す
  292. 3900 IF K$=CHR$(&H94)               THEN WAIT 50 : GOTO 3920
  293. 3910 GOTO 3840
  294. 3920 MX1(6)=0 : MY1(6)=0 : MX2(6)=0 : MY2(6)=0
  295. 3930 MX1(7)=0 : MY1(7)=0 : MX2(7)=0 : MY2(7)=0 : K$="" : RETURN
  296. 3940 '
  297. 3950 *入力
  298. 3960 WIX=(CX+1)*16 : WIY=(CY+3)*16 : WICX=(CX+1)*2 : WICY=CY+1
  299. 3970 WIX2=(CX+WX-5)*16 : WIY2=(CY+WY-2)*16 
  300. 3980 MX1(6)=WIX2-2 : MY1(6)=WIY2-2 : MX2(6)=WIX2+58 : MY2(6)=WIY2+18
  301. 3990 IF WP$="or" THEN GOTO 4080
  302. 4000 LINE (WIX-1,WIY-3)-((HX-1)*16,WIY+20),PSET,%7,BF
  303. 4010 LINE (WIX-2,WIY-4)-((HX-1)*16,WIY-4),PSET,%0,B
  304. 4020 LINE (WIX-2,WIY-3)-(WIX-2,WIY+20),PSET,%0,B
  305. 4030 BQ=6 : BM$="やめた!" : GOSUB *ボタン表示
  306. 4040 LINE(MX1(6)-1,MY1(6)-1)-(MX2(6)+1,MY2(6)+1),XOR,%0,BF
  307. 4050 WL=LEN(WIO$) : WMX=WX*2-4 : WML=WMX-LEN(WIO$) : WQK$="" : WS=WL
  308. 4060 LOCATE WICX,WICY : PRINT WIO$;SPACE$(WML);
  309. 4070 LINE (WIX+WS*8,WIY+19)-(WIX+WS*8+8,WIY+19),XOR,%255
  310. 4080 GOSUB *処理の振り分け : IF K$="" OR K$=CHR$(&H7F) THEN GOTO 4080
  311. 4090 IF K$=CHR$(&H0D)                   THEN GOSUB *入力終了処理 : RETURN
  312. 4100 IF K$=CHR$(&H18) OR  K$=CHR$(&H94) THEN GOSUB *入力中止処理 : RETURN
  313. 4110 IF K$=CHR$(&H1D) OR  K$=CHR$(&H1C) THEN GOSUB *カーソル移動処理
  314. 4120 IF K$=CHR$(&H08)                   THEN GOSUB *一文字前削除処理
  315. 4130 IF K$>CHR$(&H20) AND K$<CHR$(&HE0) THEN GOSUB *入力処理
  316. 4140 GOTO 4080
  317. 4150 '
  318. 4160 *入力処理
  319. 4170 LINE (WIX+WS*8,WIY+19)-(WIX+WS*8+8,WIY+19),XOR,%255
  320. 4180 IF WS<WMX THEN WS=WS+1 : IF WS>WL THEN WL=WL+1
  321. 4190 LOCATE WICX+WS-1,WICY : PRINT K$;
  322. 4200 LINE (WIX+WS*8,WIY+19)-(WIX+WS*8+8,WIY+19),XOR,%255 : RETURN
  323. 4210 '
  324. 4220 *カーソル移動処理
  325. 4230 LINE (WIX+WS*8,WIY+19)-(WIX+WS*8+8,WIY+19),XOR,%255
  326. 4240 WS=WS+(K$=CHR$(&H1D) AND WS>0)-(K$=CHR$(&H1C) AND WS<WL) 
  327. 4250 LINE (WIX+WS*8,WIY+19)-(WIX+WS*8+8,WIY+19),XOR,%255 : RETURN
  328. 4260 '
  329. 4270 *一文字前削除処理
  330. 4280 IF WS<=0 OR WS<WL THEN RETURN ELSE WL=WL-1 : K$=" "
  331. 4290 LINE (WIX+WS*8,WIY+19)-(WIX+WS*8+8,WIY+19),XOR,%255
  332. 4300 LOCATE WICX+WS-1,WICY : PRINT K$; : WS=WS-1
  333. 4310 LINE (WIX+WS*8,WIY+19)-(WIX+WS*8+8,WIY+19),XOR,%255 : RETURN
  334. 4320 '
  335. 4330 *入力中止処理
  336. 4340 WQK$="Can" : K$="" : RETURN
  337. 4350 '
  338. 4360 *入力終了処理
  339. 4370 WI$="" : FOR Q=1 TO WL
  340. 4380            SC=SCREEN(WICX+Q-1,WICY) : IF SC>0 THEN WI$=WI$+CHR$(SC)
  341. 4390          NEXT Q
  342. 4400 MX1(6)=0 : MY1(6)=0 : MX2(6)=0 : MY2(6)=0 : K$="" : RETURN
  343. 4410 '
  344. 4420 *ボタン表示
  345. 4430 LINE(MX1(BQ)-1,MY1(BQ)-1)-(MX2(BQ),MY2(BQ)),PSET,%5,B
  346. 4440 LINE(MX1(BQ),MY1(BQ))-(MX2(BQ)+1,MY2(BQ)+1),PSET,%0,B
  347. 4450 LINE(MX1(BQ),MY1(BQ))-(MX2(BQ),MY2(BQ)),PSET,%1,BF
  348. 4460 COLOR 0,%0 : SYMBOL(MX1(BQ)+2,MY1(BQ)+2),BM$,1,1,%7,,,5 
  349. 4470 RETURN
  350. 4480 '
  351. 4490 *ボタン押す
  352. 4500 *ボタン戻す
  353. 4510 LINE(MX1(BQ),MY1(BQ))-(MX2(BQ),MY2(BQ)),XOR,%2,BF
  354. 4520 RETURN
  355. 4530 '
  356. 4540 *枠の退避
  357. 4550 WFR=INT((WWX3*WWY3+1)/2) : WFRT(WN)=WFRT(WN-1)+WFR : WFR=WFRT(WN-1)
  358. 4560 GET@A(CX*16-2,CY*16-2)-(HX*16+1,HY*16+1),WIN,WFR
  359. 4570 RETURN
  360. 4580 '
  361. 4590 *枠の復元
  362. 4600 WFR=WFRT(WN-1)
  363. 4610 PUT@A(CX*16-2,CY*16-2)-(HX*16+1,HY*16+1),WIN,,,,,WFR
  364. 4620 RETURN
  365.